﻿package org.flixel
{
    import flash.net.*;
    import flash.utils.*;

    public class FlxU extends Object
    {

        public function FlxU()
        {
            return;
        }// end function

        public static function openURL(param1:String) : void
        {
            navigateToURL(new URLRequest(param1), "_blank");
            return;
        }// end function

        public static function abs(param1:Number) : Number
        {
            return param1 > 0 ? (param1) : (-param1);
        }// end function

        public static function floor(param1:Number) : Number
        {
            var _loc_2:* = int(param1);
            return param1 > 0 ? (_loc_2) : (_loc_2 != param1 ? ((_loc_2 - 1)) : (_loc_2));
        }// end function

        public static function ceil(param1:Number) : Number
        {
            var _loc_2:* = int(param1);
            return param1 > 0 ? (_loc_2 != param1 ? ((_loc_2 + 1)) : (_loc_2)) : (_loc_2);
        }// end function

        public static function round(param1:Number) : Number
        {
            var _loc_2:* = int(param1 + (param1 > 0 ? (0.5) : (-0.5)));
            return param1 > 0 ? (_loc_2) : (_loc_2 != param1 ? ((_loc_2 - 1)) : (_loc_2));
        }// end function

        public static function min(param1:Number, param2:Number) : Number
        {
            return param1 <= param2 ? (param1) : (param2);
        }// end function

        public static function max(param1:Number, param2:Number) : Number
        {
            return param1 >= param2 ? (param1) : (param2);
        }// end function

        public static function bound(param1:Number, param2:Number, param3:Number) : Number
        {
            var _loc_4:* = param1 < param2 ? (param2) : (param1);
            return (param1 < param2 ? (param2) : (param1)) > param3 ? (param3) : (_loc_4);
        }// end function

        public static function srand(param1:Number) : Number
        {
            return 69621 * int(param1 * 2147483647) % 2147483647 / 2147483647;
        }// end function

        public static function shuffle(param1:Array, param2:uint) : Array
        {
            var _loc_4:uint = 0;
            var _loc_5:uint = 0;
            var _loc_6:Object = null;
            var _loc_3:uint = 0;
            while (_loc_3 < param2)
            {
                
                _loc_4 = Math.random() * param1.length;
                _loc_5 = Math.random() * param1.length;
                _loc_6 = param1[_loc_5];
                param1[_loc_5] = param1[_loc_4];
                param1[_loc_4] = _loc_6;
                _loc_3 = _loc_3 + 1;
            }
            return param1;
        }// end function

        public static function getRandom(param1:Array, param2:uint = 0, param3:uint = 0) : Object
        {
            var _loc_4:uint = 0;
            if (param1 != null)
            {
                _loc_4 = param3;
                if (_loc_4 == 0 || _loc_4 > param1.length - param2)
                {
                    _loc_4 = param1.length - param2;
                }
                if (_loc_4 > 0)
                {
                    return param1[param2 + uint(Math.random() * _loc_4)];
                }
            }
            return null;
        }// end function

        public static function getTicks() : uint
        {
            return getTimer();
        }// end function

        public static function formatTicks(param1:uint, param2:uint) : String
        {
            return (param2 - param1) / 1000 + "s";
        }// end function

        public static function makeColor(param1:uint, param2:uint, param3:uint, param4:Number = 1) : uint
        {
            return ((param4 > 1 ? (param4) : (param4 * 255)) & 255) << 24 | (param1 & 255) << 16 | (param2 & 255) << 8 | param3 & 255;
        }// end function

        public static function makeColorFromHSB(param1:Number, param2:Number, param3:Number, param4:Number = 1) : uint
        {
            var _loc_5:Number = NaN;
            var _loc_6:Number = NaN;
            var _loc_7:Number = NaN;
            var _loc_8:int = 0;
            var _loc_9:Number = NaN;
            var _loc_10:Number = NaN;
            var _loc_11:Number = NaN;
            var _loc_12:Number = NaN;
            if (param2 == 0)
            {
                _loc_5 = param3;
                _loc_6 = param3;
                _loc_7 = param3;
            }
            else
            {
                if (param1 == 360)
                {
                    param1 = 0;
                }
                _loc_8 = param1 / 60;
                _loc_9 = param1 / 60 - _loc_8;
                _loc_10 = param3 * (1 - param2);
                _loc_11 = param3 * (1 - param2 * _loc_9);
                _loc_12 = param3 * (1 - param2 * (1 - _loc_9));
                switch(_loc_8)
                {
                    case 0:
                    {
                        _loc_5 = param3;
                        _loc_6 = _loc_12;
                        _loc_7 = _loc_10;
                        break;
                    }
                    case 1:
                    {
                        _loc_5 = _loc_11;
                        _loc_6 = param3;
                        _loc_7 = _loc_10;
                        break;
                    }
                    case 2:
                    {
                        _loc_5 = _loc_10;
                        _loc_6 = param3;
                        _loc_7 = _loc_12;
                        break;
                    }
                    case 3:
                    {
                        _loc_5 = _loc_10;
                        _loc_6 = _loc_11;
                        _loc_7 = param3;
                        break;
                    }
                    case 4:
                    {
                        _loc_5 = _loc_12;
                        _loc_6 = _loc_10;
                        _loc_7 = param3;
                        break;
                    }
                    case 5:
                    {
                        _loc_5 = param3;
                        _loc_6 = _loc_10;
                        _loc_7 = _loc_11;
                        break;
                    }
                    default:
                    {
                        _loc_5 = 0;
                        _loc_6 = 0;
                        _loc_7 = 0;
                        break;
                        break;
                    }
                }
            }
            return ((param4 > 1 ? (param4) : (param4 * 255)) & 255) << 24 | uint(_loc_5 * 255) << 16 | uint(_loc_6 * 255) << 8 | uint(_loc_7 * 255);
        }// end function

        public static function getRGBA(param1:uint, param2:Array = null) : Array
        {
            if (param2 == null)
            {
                param2 = new Array();
            }
            param2[0] = param1 >> 16 & 255;
            param2[1] = param1 >> 8 & 255;
            param2[2] = param1 & 255;
            param2[3] = Number(param1 >> 24 & 255) / 255;
            return param2;
        }// end function

        public static function getHSB(param1:uint, param2:Array = null) : Array
        {
            if (param2 == null)
            {
                param2 = new Array();
            }
            var _loc_3:* = Number(param1 >> 16 & 255) / 255;
            var _loc_4:* = Number(param1 >> 8 & 255) / 255;
            var _loc_5:* = Number(param1 & 255) / 255;
            var _loc_6:* = _loc_3 > _loc_4 ? (_loc_3) : (_loc_4);
            var _loc_7:* = (_loc_3 > _loc_4 ? (_loc_3) : (_loc_4)) > _loc_5 ? (_loc_6) : (_loc_5);
            _loc_6 = _loc_3 > _loc_4 ? (_loc_4) : (_loc_3);
            var _loc_8:* = _loc_6 > _loc_5 ? (_loc_5) : (_loc_6);
            var _loc_9:* = _loc_7 - _loc_8;
            param2[2] = _loc_7;
            param2[1] = 0;
            param2[0] = 0;
            if (_loc_7 != 0)
            {
                param2[1] = _loc_9 / _loc_7;
            }
            if (param2[1] != 0)
            {
                if (_loc_3 == _loc_7)
                {
                    param2[0] = (_loc_4 - _loc_5) / _loc_9;
                }
                else if (_loc_4 == _loc_7)
                {
                    param2[0] = 2 + (_loc_5 - _loc_3) / _loc_9;
                }
                else if (_loc_5 == _loc_7)
                {
                    param2[0] = 4 + (_loc_3 - _loc_4) / _loc_9;
                }
                param2[0] = param2[0] * 60;
                if (param2[0] < 0)
                {
                    param2[0] = param2[0] + 360;
                }
            }
            param2[3] = Number(param1 >> 24 & 255) / 255;
            return param2;
        }// end function

        public static function formatTime(param1:Number, param2:Boolean = false) : String
        {
            var _loc_3:* = int(param1 / 60) + ":";
            var _loc_4:* = int(param1) % 60;
            if (int(param1) % 60 < 10)
            {
                _loc_3 = _loc_3 + "0";
            }
            _loc_3 = _loc_3 + _loc_4;
            if (param2)
            {
                _loc_3 = _loc_3 + ".";
                _loc_4 = (param1 - int(param1)) * 100;
                if (_loc_4 < 10)
                {
                    _loc_3 = _loc_3 + "0";
                }
                _loc_3 = _loc_3 + _loc_4;
            }
            return _loc_3;
        }// end function

        public static function formatArray(param1:Array) : String
        {
            if (param1 == null || param1.length <= 0)
            {
                return "";
            }
            var _loc_2:* = param1[0].toString();
            var _loc_3:uint = 0;
            var _loc_4:* = param1.length;
            while (_loc_3 < _loc_4)
            {
                
                _loc_2 = _loc_2 + (", " + param1[_loc_3++].toString());
            }
            return _loc_2;
        }// end function

        public static function formatMoney(param1:Number, param2:Boolean = true, param3:Boolean = true) : String
        {
            var _loc_4:int = 0;
            var _loc_5:* = param1;
            var _loc_6:String = "";
            var _loc_7:String = "";
            var _loc_8:String = "";
            while (_loc_5 > 0)
            {
                
                if (_loc_6.length > 0 && _loc_7.length <= 0)
                {
                    if (param3)
                    {
                        _loc_7 = ",";
                    }
                    else
                    {
                        _loc_7 = ".";
                    }
                }
                _loc_8 = "";
                _loc_4 = _loc_5 - int(_loc_5 / 1000) * 1000;
                _loc_5 = _loc_5 / 1000;
                if (_loc_5 > 0)
                {
                    if (_loc_4 < 100)
                    {
                        _loc_8 = _loc_8 + "0";
                    }
                    if (_loc_4 < 10)
                    {
                        _loc_8 = _loc_8 + "0";
                    }
                }
                _loc_6 = _loc_8 + _loc_4 + _loc_7 + _loc_6;
            }
            if (param2)
            {
                _loc_5 = int(param1 * 100) - int(param1) * 100;
                _loc_6 = _loc_6 + ((param3 ? (".") : (",")) + _loc_5);
                if (_loc_5 < 10)
                {
                    _loc_6 = _loc_6 + "0";
                }
            }
            return _loc_6;
        }// end function

        public static function getClassName(param1:Object, param2:Boolean = false) : String
        {
            var _loc_3:* = getQualifiedClassName(param1);
            _loc_3 = _loc_3.replace("::", ".");
            if (param2)
            {
                _loc_3 = _loc_3.substr((_loc_3.lastIndexOf(".") + 1));
            }
            return _loc_3;
        }// end function

        public static function compareClassNames(param1:Object, param2:Object) : Boolean
        {
            return getQualifiedClassName(param1) == getQualifiedClassName(param2);
        }// end function

        public static function getClass(param1:String) : Class
        {
            return getDefinitionByName(param1) as Class;
        }// end function

        public static function computeVelocity(param1:Number, param2:Number = 0, param3:Number = 0, param4:Number = 10000) : Number
        {
            var _loc_5:Number = NaN;
            if (param2 != 0)
            {
                param1 = param1 + param2 * FlxG.elapsed;
            }
            else if (param3 != 0)
            {
                _loc_5 = param3 * FlxG.elapsed;
                if (param1 - _loc_5 > 0)
                {
                    param1 = param1 - _loc_5;
                }
                else if (param1 + _loc_5 < 0)
                {
                    param1 = param1 + _loc_5;
                }
                else
                {
                    param1 = 0;
                }
            }
            if (param1 != 0 && param4 != 10000)
            {
                if (param1 > param4)
                {
                    param1 = param4;
                }
                else if (param1 < -param4)
                {
                    param1 = -param4;
                }
            }
            return param1;
        }// end function

        public static function rotatePoint(param1:Number, param2:Number, param3:Number, param4:Number, param5:Number, param6:FlxPoint = null) : FlxPoint
        {
            var _loc_7:Number = 0;
            var _loc_8:Number = 0;
            var _loc_9:* = param5 * -0.0174533;
            while (_loc_9 < -3.14159)
            {
                
                _loc_9 = _loc_9 + 6.28319;
            }
            while (_loc_9 > 3.14159)
            {
                
                _loc_9 = _loc_9 - 6.28319;
            }
            if (_loc_9 < 0)
            {
                _loc_7 = 1.27324 * _loc_9 + 0.405285 * _loc_9 * _loc_9;
                if (_loc_7 < 0)
                {
                    _loc_7 = 0.225 * (_loc_7 * (-_loc_7) - _loc_7) + _loc_7;
                }
                else
                {
                    _loc_7 = 0.225 * (_loc_7 * _loc_7 - _loc_7) + _loc_7;
                }
            }
            else
            {
                _loc_7 = 1.27324 * _loc_9 - 0.405285 * _loc_9 * _loc_9;
                if (_loc_7 < 0)
                {
                    _loc_7 = 0.225 * (_loc_7 * (-_loc_7) - _loc_7) + _loc_7;
                }
                else
                {
                    _loc_7 = 0.225 * (_loc_7 * _loc_7 - _loc_7) + _loc_7;
                }
            }
            _loc_9 = _loc_9 + 1.5708;
            if (_loc_9 > 3.14159)
            {
                _loc_9 = _loc_9 - 6.28319;
            }
            if (_loc_9 < 0)
            {
                _loc_8 = 1.27324 * _loc_9 + 0.405285 * _loc_9 * _loc_9;
                if (_loc_8 < 0)
                {
                    _loc_8 = 0.225 * (_loc_8 * (-_loc_8) - _loc_8) + _loc_8;
                }
                else
                {
                    _loc_8 = 0.225 * (_loc_8 * _loc_8 - _loc_8) + _loc_8;
                }
            }
            else
            {
                _loc_8 = 1.27324 * _loc_9 - 0.405285 * _loc_9 * _loc_9;
                if (_loc_8 < 0)
                {
                    _loc_8 = 0.225 * (_loc_8 * (-_loc_8) - _loc_8) + _loc_8;
                }
                else
                {
                    _loc_8 = 0.225 * (_loc_8 * _loc_8 - _loc_8) + _loc_8;
                }
            }
            var _loc_10:* = param1 - param3;
            var _loc_11:* = param4 + param2;
            if (param6 == null)
            {
                param6 = new FlxPoint();
            }
            param6.x = param3 + _loc_8 * _loc_10 - _loc_7 * _loc_11;
            param6.y = param4 - _loc_7 * _loc_10 - _loc_8 * _loc_11;
            return param6;
        }// end function

        public static function getAngle(param1:FlxPoint, param2:FlxPoint) : Number
        {
            var _loc_3:* = param2.x - param1.x;
            var _loc_4:* = param2.y - param1.y;
            if (_loc_3 == 0 && _loc_4 == 0)
            {
                return 0;
            }
            var _loc_5:* = 3.14159 * 0.25;
            var _loc_6:* = 3 * _loc_5;
            var _loc_7:* = _loc_4 < 0 ? (-_loc_4) : (_loc_4);
            var _loc_8:Number = 0;
            if (_loc_3 >= 0)
            {
                _loc_8 = _loc_5 - _loc_5 * ((_loc_3 - _loc_7) / (_loc_3 + _loc_7));
            }
            else
            {
                _loc_8 = _loc_6 - _loc_5 * ((_loc_3 + _loc_7) / (_loc_7 - _loc_3));
            }
            _loc_8 = (_loc_4 < 0 ? (-_loc_8) : (_loc_8)) * 57.2958;
            if (_loc_8 > 90)
            {
                _loc_8 = _loc_8 - 270;
            }
            else
            {
                _loc_8 = _loc_8 + 90;
            }
            return _loc_8;
        }// end function

        public static function getDistance(param1:FlxPoint, param2:FlxPoint) : Number
        {
            var _loc_3:* = param1.x - param2.x;
            var _loc_4:* = param1.y - param2.y;
            return Math.sqrt(_loc_3 * _loc_3 + _loc_4 * _loc_4);
        }// end function

    }
}
